package cn.buddha.jec.model.head;

import cn.buddha.jec.constants.TongConstant;
import cn.buddha.jec.model.TongBaseData;
import cn.buddha.jec.util.TongDateUtils;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Date;

/**
 * @ClassName TongInHead
 * @Author 友野浩二
 * @Description 业务请求头信息，包含了公共属性, 也就是外部系统在调用本平台的任何一个API接口的时候都需要上送的属性。
 * @Version 1.0
 */
//@Data
@Setter
@Getter
@EqualsAndHashCode(callSuper = false)
public class TongInHead extends TongBaseData {
    private static final long serialVersionUID = 8992377877633566651L;

    /* ============================== 下面5个字段(都必须上送)可以记录,哪个人在哪个渠道在什么时间触发了什么交易 ======== */

    /**
     * 客户号<br />
     * 若调用方是管理端(给管理人员使用的系统),则上送管理员编号;
     * 若调用方是面向消费者的系统,则上送消费者的客户号;
     */
    @ApiModelProperty(value = "客户号", required = true)
    @NotBlank
    private String clientNo;

    /**
     * 请求方系统编号,由本平台统一分配<br />
     * 【注意】：该字段的目的是为了防止非法渠道调用
     */
    @ApiModelProperty(value = "请求方系统编号", required = true, position = 1)
    @NotBlank
    private String reqSystemId;

    /**
     * 交易编号,请求方的流水号<br />
     * 【注意】：reqSystemId + reqBusinessNo 唯一确定一笔交易,可用来作防重校验
     */
    @ApiModelProperty(value = "请求方流水号", required = true, position = 2)
    @NotBlank
    private String reqBusinessNo;

    /**
     * 交易日期(格式: yyyy-MM-dd),请求方的系统日期
     */
    @ApiModelProperty(value = "请求方交易日期", example = "yyyy-MM-dd", required = true, position = 3)
    @NotNull    // 对于Date类型不能使用@NotBlank,会报错
    // 入参格式化: 传入的参数 reqTranDate 是 String ,而接收参数的 reqTranDate 是 java.util.Date 类型的，类型无法直接转换
    // timezone: 指定北京时间(东八区), pattern: 日期格式
    @JsonFormat(timezone = TongConstant.TIME_ZONE_GMT8, pattern = TongDateUtils.PATTERN_ISO_DATE)
    private Date reqTranDate;

    @ApiModelProperty(value = "请求文件路径", example = "D:/test/", position = 4)
    private String reqFilePath;

}
